//
//  RootViewController.swift
//  上海微博
//
//  Created by teacher on 16/2/22.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit

/// 根视图控制器-其他主控制器的基类
class RootViewController: UIViewController {
    
    // MARK: - 公共属性
    
    /// 表格视图
    lazy var tableView = UITableView(frame: CGRectZero, style: .Plain)
    /// 下拉刷新控件
    lazy var refreshControl = UIRefreshControl()
    /// 上拉刷新视图
    lazy var pullupView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray)
    /// 访客视图 - 如果用户登录成功，就不需要创建访客视图
    // 如果使用懒加载，会在登录成功仍然创建访客视图，造成无谓的内存开销
    // lazy var visitorView: VisitorView? = VisitorView()
    // 四个控制的访客视图各自独立，互补干扰！
    var visitorView: VisitorView?
    
    // MARK: - 视图生命周期
    override func loadView() {
        // 用户登录显示 tableView ／ 否则显示访客视图
        UserAccount.sharedUserAccount.isLogin ? setupTableView() : setupVisitorView()
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        
        // 如果没有登录注册通知
        if UserAccount.sharedUserAccount.isLogin {
            loadData()
        } else {
            NSNotificationCenter.defaultCenter().addObserver(
                self,
                selector: "loginSuccessed",
                name: CZWeiBoLoginSuccessedNotification,
                object: nil)
        }
    }
    
    /// 加载数据 - 真正的数据加载，应该放在子类中实现
    func loadData() {
        
    }
    
    /// 登录成功监听方法
    @objc private func loginSuccessed() {
        view = nil
        
        // 注销通知
        NSNotificationCenter.defaultCenter().removeObserver(self, name: CZWeiBoLoginSuccessedNotification, object: nil)
    }
}

// MARK: - VisitorViewDelegate
extension RootViewController: VisitorViewDelegate {
    
    func visitorViewDidRegister() {
        print("注册")
    }
    
    func visitorViewDidLogin() {
        print("登录")
        let oauthVC = OAuthViewController()
        let nav = UINavigationController(rootViewController: oauthVC)
        
        
        presentViewController(nav, animated: true, completion: nil)
    }
}



// MARK: - 设置界面
extension RootViewController {
    
    /// 设置访客视图
    private func setupVisitorView() {
        visitorView = VisitorView()
        
        // 设置代理
        visitorView?.delegate = self
        
        view = visitorView
        
        // 设置状态栏按钮 - 如果换行参数，一定保证一个参数一行
        navigationItem.leftBarButtonItem = UIBarButtonItem(
            title: "注册",
            style: .Plain,
            target: self,
            action: "visitorViewDidRegister")
        navigationItem.rightBarButtonItem = UIBarButtonItem(
            title: "登录",
            style: .Plain,
            target: self,
            action: "visitorViewDidLogin")
    }
    
    /// 设置表格视图
    private func setupTableView() {
        view = tableView
        
        // 设置数据源
        tableView.dataSource = self
        tableView.delegate = self
    }
    
    /// 设置刷新控件
    /// 需要刷新控件的子控制器单独调用 `setupRefreshControl`
    /// 私有函数不能被子类`继承`
    func setupRefreshControl() {
        tableView.addSubview(refreshControl)
        // 设置刷新控件的监听方法
        refreshControl.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        
        // 设置上拉刷新视图
        tableView.tableFooterView = pullupView
    }
}

extension RootViewController: UITableViewDataSource, UITableViewDelegate {
    
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }
    
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 0
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        return UITableViewCell()
    }
    
    func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        
        // 根据数据源判断是否是最后一行
        let section = tableView.numberOfSections - 1
        let row = tableView.numberOfRowsInSection(section) - 1
        
        // print("\(indexPath) \(section) \(row)")
        // 判断是否是最后一行，同时没有正在上拉刷新
        if section == indexPath.section && row == indexPath.row && !pullupView.isAnimating() {
            print("上拉刷新")
            
            // 启动菊花
            pullupView.startAnimating()
            // 上拉刷新加载数据
            loadData()
        }
        
        
    }
}
